home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1993 / 6 / 02 / dodec / source / doprng.asm < prev    next >
Encoding:
Assembly Source File  |  1995-06-01  |  1.8 KB  |  130 lines

  1.         dseg
  2.         xref    _prng_state
  3.         xref    _modtable
  4.  
  5.         cseg
  6.         xdef    _init_prng
  7.         xdef    _prng
  8.         xdef    _check_hl
  9.         xdef    _mirror
  10.  
  11. _init_prng:    move.l    4(sp),d0
  12.         move.l    d0,d1
  13.         not.l    d1
  14.         movem.l    d0-d1,_prng_state
  15. _prng:        movem.l    d2-d3,-(sp)
  16.         movem.l    _prng_state,d0-d1
  17.         andi.b    #$0e,d0
  18.         ori.b    #$20,d0
  19.         move.l    d0,d2
  20.         move.l    d1,d3
  21.         add.l    d2,d2
  22.         addx.l    d3,d3
  23.         add.l    d2,d0
  24.         addx.l    d3,d1
  25.         swap    d3
  26.         swap    d2
  27.         move.w    d2,d3
  28.         clr.w    d2
  29.         add.l    d2,d0
  30.         addx.l    d3,d1
  31.         movem.l    d0-d1,_prng_state
  32.         moveq    #0,d0
  33.         swap    d1
  34.         move.w    d1,d0
  35.         divu    #9999,d0
  36.         clr.w    d0
  37.         swap    d0        
  38.         movem.l    (sp)+,d2-d3
  39.         rts
  40.  
  41. _check_hl:    movem.l    d2-d4,-(sp)
  42.         swap    d0
  43.         or.w    d1,d0
  44.         move.l    d0,d1
  45.         not.l    d1
  46.  
  47.         move.l    _modtable,a1
  48.         add.l    #$8000,a1
  49.  
  50.         andi.b    #$0e,d0
  51.         ori.b    #$20,d0
  52.         move.l    d0,d2
  53.         move.l    d1,d3
  54.         add.l    d2,d2
  55.         addx.l    d3,d3
  56.         add.l    d2,d0
  57.         addx.l    d3,d1
  58.         swap    d3
  59.         swap    d2
  60.         move.w    d2,d3
  61.         clr.w    d2
  62.         add.l    d2,d0
  63.         addx.l    d3,d1
  64.  
  65.         moveq    #3,d4
  66. checkloop:    andi.b    #$0e,d0
  67.         ori.b    #$20,d0
  68.         move.l    d0,d2
  69.         move.l    d1,d3
  70.         add.l    d2,d2
  71.         addx.l    d3,d3
  72.         add.l    d2,d0
  73.         addx.l    d3,d1
  74.         swap    d3
  75.         swap    d2
  76.         move.w    d2,d3
  77.         clr.w    d2
  78.         add.l    d2,d0
  79.         addx.l    d3,d1
  80.  
  81.         move.l    d1,d3
  82.         swap    d3
  83.         move.b    (a1,d3.w),d2
  84.  
  85.         cmp.b    (a0)+,d2
  86.         bne.s    itiswrong
  87.  
  88.         dbf    d4,checkloop
  89.  
  90.         moveq    #1,d0
  91.         bra.s    exitthis
  92.  
  93. itiswrong:    moveq    #0,d0
  94. exitthis:    movem.l    (sp)+,d2-d4
  95.         rts
  96.  
  97. _mirror:    lsr.w    #1,d1
  98.         roxl.w    #1,d0
  99.         lsr.w    #1,d1
  100.         roxl.w    #1,d0
  101.         lsr.w    #1,d1
  102.         roxl.w    #1,d0
  103.         lsr.w    #1,d1
  104.         roxl.w    #1,d0
  105.         lsr.w    #1,d1
  106.         roxl.w    #1,d0
  107.         lsr.w    #1,d1
  108.         roxl.w    #1,d0
  109.         lsr.w    #1,d1
  110.         roxl.w    #1,d0
  111.         lsr.w    #1,d1
  112.         roxl.w    #1,d0
  113.         lsr.w    #1,d1
  114.         roxl.w    #1,d0
  115.         lsr.w    #1,d1
  116.         roxl.w    #1,d0
  117.         lsr.w    #1,d1
  118.         roxl.w    #1,d0
  119.         lsr.w    #1,d1
  120.         roxl.w    #1,d0
  121.         lsr.w    #1,d1
  122.         roxl.w    #1,d0
  123.         lsr.w    #1,d1
  124.         roxl.w    #1,d0
  125.         lsr.w    #1,d1
  126.         roxl.w    #1,d0
  127.         lsr.w    #1,d1
  128.         roxl.w    #1,d0
  129.         rts
  130.